//
//  TextView+Extension.swift
//  EmotionKeyboardDemo
//
//  Created by mac on 15/12/26.
//  Copyright © 2015年 zhouxubin. All rights reserved.
//

import UIKit

extension UITextView {
    
    // 把图片表情文本转换成纯字符串文本
    func emoticonTextToStringText() ->String {
        // 遍历文本内容
        
        // 可变字符串用来拼接
        var strM = String()
        
        attributedText.enumerateAttributesInRange(NSMakeRange(0, attributedText.length), options: []) { (dict, range, _) -> Void in
            // 判断是否是图片表情,如果是图片那么字典中会有NSAttachment
            if let attachment = dict["NSAttachment"] as? XBEmoticonAttachment { // 有图片附件
                strM += attachment.emoticon.chs!
            }else { // 没有图片
                strM += (self.attributedText.string as NSString).substringWithRange(range)
            }
        }
        // 返回字符串文本
        return strM
    }
    
    func insertEmoticon(emoticon: XBEmoticon) {
        // 如果是删除按钮
        if emoticon.isDelete == true {
            deleteBackward()
            return
        }
        
        // 如果是空白表情
        if emoticon.isEmpty == true {
            return
        }
        
        // 如果是emoji表情的话
        if let emoji = emoticon.emojiStr {
            replaceRange(selectedTextRange!, withText: emoji)
            return
        }
        
        // 走到这里是图片表情,应该把图片添加到富文本的附件上
        let imageAttri = XBEmoticonAttachment(emoticon: emoticon).imageText(font!)
        let strM = NSMutableAttributedString(attributedString: attributedText)
        // 交换
        strM.replaceCharactersInRange(selectedRange, withAttributedString: imageAttri)
        // 记录交换前的光标
        let range = selectedRange
        attributedText = strM
        // 恢复光标位置
        selectedRange = NSMakeRange(range.location + 1, 0)
        
        // 主动调用代理方法,解决了输入表情的时候文本不会变化
        delegate?.textViewDidChange?(self)
    }
    
}
